#include <stdbool.h>
#include <stdarg.h>
#include <stdio.h>
#include <memory.h>

#include "header.h"

#ifndef VHDLSENDER_SENDER_H
#define VHDLSENDER_SENDER_H

#define DEBUG

/**
 * 按照指定形式生成一个数据块
 * @param dataType 指定生成的数据块的形式
 * @param dataSize 数据块的大小
 * @param payload 开辟好的空间指针
 * @return
 */
long getVCBlockNumFromBlock(enum VC_TYPE vcType, long blockSize);
long getVCBlockNumFromFile(enum VC_TYPE vcType, FILE* pFile);
long getVCBlockUsageFromBlockSize(enum VC_TYPE vcType, long blockSize);

bool generatePersistBlock(enum GENERATE_DATA_TYPE dataType, long dataSize, unsigned char *pload);
bool generateBodyData(enum VC_TYPE vcType, uint16_t logicalID, uint16_t physicalID, uint16_t SQ, uint16_t MFT, unsigned char *data);
bool generateHeaderData(enum VC_TYPE vcType, uint16_t MFT, long length, unsigned char *data);

long splitFileIntoPackets(enum VC_TYPE vcType, char *filename);
long splitDataIntoPackets(enum VC_TYPE vcType, long size, unsigned char *buffer);

bool splitPersistDataToBodyFrame(enum VC_TYPE vcType, int16_t SQ, int16_t startMFI, const unsigned char* origin, long originLength, unsigned char* out, ...) ;

/**
 * 分块填充的块的数量已知,这个数据块的每行个数  (对应PDF图5).
 * @param blockNum 块数量
 * @return 返回一个数组,数组中对应的数量就是每行中的Frame数量.
 */
void getVCBlockNumToNumArrays(int16_t SQ,int16_t blockNum, int16_t framesInLine[SQ]);





#endif //VHDLSENDER_SENDER_H
